<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <!-- コンテナをロード -->
  <script type="text/javascript" src="../src/container.js" ></script>
</head>
<body>
  <div id="stdout"></div>
  <script type="text/javascript">
var stdout = document.getElementById( "stdout" );

// クラス
function Kitten() {}
Kitten.prototype = {
   run:function() { stdout.innerHTML += this.name + " : teku teku" + "<br/>"; },
   meow:function() { stdout.innerHTML += this.name + " : meow" + "<br/>"; }
};

function Tiger() {}
Tiger.prototype = {
   run:function() { stdout.innerHTML += this.name + " : teku teku" + "<br/>"; },
   bite:function() { stdout.innerHTML += this.name + " : gabu" + "<br/>"; }
};

// コンテナ
var c = new container.Container( function( binder ) {
  binder.bind( Kitten ).inject({ name:"mii", age:1 });
  binder.bind( Kitten ).inject({ name:"kuro", age:2 });

  binder.bind( Tiger ).inject({ name:"tora", age:2 });
});

// Typeを使ってコンテナからコンポーネントを取得する。
// "run", "bite"を持つ最初のコンポーネントを取得。
var tora = c.get( container.types.has( "run", "bite" ) );
tora.bite(); // tora : gabu

stdout.innerHTML += "---<br/>";

// Typeにマッチするすべてのコンポーネントを取得する。
// runはすべてのコンポーネントが持っているので、mii,kuro,toraすべてがヒット。
var kittens = c.gets( container.types.has( "run" ) );
for ( var i=0; i < kittens.length; i++ ) {
    kittens[i].run();
}

  </script>
</body>
</html>